import {BookModel} from "../../models/book.js";
import {LikeModel} from "../../models/like.js";

const bookModel = new BookModel();
const likeModel = new LikeModel();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    comments:[],//短评数组
    book:null,//书籍详情
    likeStatus: false,
    likeCount:0,
    posting:false//用户是否正在编辑短评
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    wx.showLoading();
    //获取从点击组件传过来的书籍id
    const bid = options.bid;
    //根据id获取Promise的实例，再根据这些实例set书籍的详细信息
    const detail = bookModel.getDetail(bid);
    const comments = bookModel.getComments(bid);
    const likeStatus = bookModel.getLikeStatus(bid);

    /**
     * 下面是新的Promise 可以视为上面三个promise实例的合体
     * 三个子promise都请求到了数据才会触发then回调函数
     * 这个是Promise.all；另外还有一个Promise.race
     * race就是竞争的意思，也就是当子promise有一个完成，就会触发then回调函数，而all是所有都完成才会触发
     */
    Promise.all([detail,comments,likeStatus]).then(res=>{
      //只有当上面三个promise全都完成之后才会触发then
      console.log(res);
      this.setData({
        book:res[0],
        comments:res[1].comments,
        likeStatus:res[2].like_status,
        likeCount:res[2].fav_nums
      });
      wx.hideLoading();
    });

    // detail.then(res=>{
    //   console.log(res);
    //   this.setData({book:res});
    // });
    // comments.then(res=>{
    //   console.log(res);
    //   this.setData({comments:res.comments});
    // });
    // likeStatus.then(res=>{
    //   console.log(res);
    //   this.setData({
    //     likeStatus:res.like_status,
    //     likeCount:res.fav_nums
    //   });
    // });
  },

  /**
   * 书籍详情点击喜欢按钮
   * @param event
   */
  onLike(event){
    const like_or_cancel = event.detail.behavior;
    likeModel.like(like_or_cancel,this.data.book.id,400);//400代表是书籍类型
  },

  /**
   * 书籍详情点击编辑短评
   * @param event
   */
  onFakePost(event){
    this.setData({
      posting:true
    });
  },

  /**
   * 书籍详情点击取消编辑短评
   * @param event
   */
  onCancel(event){
    this.setData({
      posting:false
    });
  },

  /**
   * 输入或点击短评，发送短评到服务器
   * @param event
   */
  onPost(event){
    //获取将要发送给服务器的评论，前者是点击短评时候给服务器的comment,后者是编辑输入框给服务器的comment
    const comment = event.detail.text || event.detail.value;
    //判断comment是否为空，如果空就不发给服务器
    if(!comment) return;
    //判断短评是否少于12个字，如果超过则不会发送给服务器
    if(comment.length>12){
      wx.showToast({
        title: '短评最多12个字',
        icon: "none"
      });
      return;
    }
    //通过长度验证，发送comment给服务器
    bookModel.postComment(this.data.book.id,comment).then(res=>{
      //页面提示
      wx.showToast({
        title: '+1',
        icon: "none"
      });
      // 在this.data.comments数组首部添加元素
      this.data.comments.unshift({
        content:comment,
        nums:1
      });
      //将添加过的数组重新赋值setData,同时改变遮罩状态
      this.setData({
        comments:this.data.comments,
        posting:false
      });
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})